<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>3.天气案例_深度监视</title>
        <!-- 引入Vue -->
        <script type="text/javascript" src="../js/vue.js"></script>
    </head>
    <body>
        <div id="root">
            <h2>深度监视</h2>
            <p>1. Vue中的watch默认不监测对象内部值的改变（一层）</p>
            <p>2. 配置deep: true可以监测对象内部值改变（多层）</p>
            <h2>备注：</h2>
            <p>1. Vue自身可以监测对象内部值的改变，但Vue提供的watch默认不可以！</p>
            <p>2. 使用watch时根据数据的具体结构，决定是否采用深度监视。</p>

            <h2>今天天气很{{info}}</h2>
            <button @click="changeWeather">切换天气</button>
            <hr>
            <h2>a的值为：{{numbers.a}}</h2>
            <button @click="numbers.a++">a+1</button>
            <hr>
            <h2>b的值为：{{numbers.b}}</h2>
            <button @click="numbers.b++">b+1</button>
        </div>
        <script type="text/javascript">
            Vue.config.productionTip = false    // 阻止Vue在启动时生成生产提示

            // 创建Vue实例，开端
            const vm = new Vue({
                el: '#root', // el用于指定当前Vue实例为哪个容器服务，值通常为css选择器字符串。
                data: {     // data中用于存储数据，数据供el指定的容器去使用
                    isHot: false,
                    numbers: {
                        a: 1,
                        b: 1
                    }
                },
                computed: {
                    info: function() {
                        return this.isHot ? '炎热' : '凉爽'
                    }
                },
                methods: {
                    changeWeather(){
                        this.isHot = !this.isHot
                    }
                },
                // 监视方法
                watch: {
                    info: {
                        handler(newValue, oldValue){
                            console.log("info从" + oldValue + "修改为" + newValue)
                        }
                    },
                    // 监视多级结构中某个属性的变化
                    'numbers.a': {
                        handler(){
                            console.log('a的值改变了')
                        }
                    },
                    // 监视多级结构中所有属性的变化
                    numbers: {
                        deep: true,
                        handler() {
                            console.log('numbers改变了')
                        }
                    }
                }
            })
        </script>
    </body>
</html>
